﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos
Imports System.Transactions

Public Class ParamEmiBL
    'Public Function RegistrarParamEmi(ByVal TokenConexion As String, ByVal ParamEmi As ParametrosEmisionBE, ByVal ParamEmiPrede As ParametrosEmisionPredeterminadosBE, ByRef codigoResp As Integer, ByRef mensajes As String) As Boolean

    '    Dim ParamEmiDAL As ParamEmiDAL = New ParamEmiDAL("")
    '    mensajes = ""
    '    Try
    '        TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
    '        If (EsValidoParaActualizar(ParamEmi, ParamEmiPrede, mensajes)) Then
    '            ParamEmiDAL = New ParamEmiDAL(TokenConexion)
    '            Dim IdParamEmi As Integer = 0
    '            Using transacCta As TransactionScope = New TransactionScope()
    '                If (ParamEmiDAL.registraParamEmi(ParamEmi, IdParamEmi)) Then
    '                    If (ParamEmiDAL.registraParamEmiPrede(ParamEmiPrede, IdParamEmi)) Then
    '                        transacCta.Complete()
    '                        codigoResp = 0
    '                        mensajes = "Los Parametros de Emisión de Comprobantes se registro con éxito."
    '                        Return True
    '                    Else
    '                        codigoResp = 247
    '                        mensajes &= "Los Parametros de Emisión de Comprobantes no pudieron ser registrados en el sistema." & vbCrLf
    '                        Return False
    '                    End If
    '                Else
    '                    codigoResp = 247
    '                    mensajes &= "Los Parametros de Emisión de Comprobantes no pudieron ser registrados en el sistema." & vbCrLf
    '                    Return False
    '                End If
    '            End Using
    '        Else
    '            codigoResp = 1
    '            mensajes = "Los Parametros de Emisión de Comprobantes no son validos para registrar: " & mensajes
    '            Return False
    '        End If
    '    Catch ex As Exception
    '        Log.LogException(ex, "ParamEmiBL.RegistrarParamEmi")
    '        codigoResp = 999
    '        mensajes = mensajes & "Excepción al registrar Parametros de Emisión de Comprobantes: " & ex.Message
    '        Return False
    '    Finally
    '        ParamEmiDAL = Nothing
    '    End Try
    'End Function

    Private Function EsValidoParaActualizar(ByRef ParamEmi As ParametrosEmisionBE, ByRef ParamEmiPrede As ParametrosEmisionPredeterminadosBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrWhiteSpace(ParamEmi.DecimalesEnCantidades)) Then
                mensaje &= "El dato Decimales en Cantidades no puede ir vacio." & vbCrLf
            Else
                If Not (IsNumeric(ParamEmi.DecimalesEnCantidades)) Then
                    mensaje &= "El dato Decimales en Cantidades debe ser numérico." & vbCrLf
                ElseIf (ParamEmi.DecimalesEnCantidades < 0 Or ParamEmi.DecimalesEnCantidades > 6) Then
                    mensaje &= "Solo se permiten el manejo de 0 a 6 decimales (Decimales en Cantidades)." & vbCrLf
                End If
            End If
            If (String.IsNullOrWhiteSpace(ParamEmi.DecimalesEnImpuestos)) Then
                mensaje &= "El dato Decimales en Impuestos no puede ir vacio." & vbCrLf
            Else
                If Not (IsNumeric(ParamEmi.DecimalesEnImpuestos)) Then
                    mensaje &= "El dato Decimales en Impuestos debe ser numérico." & vbCrLf
                ElseIf (ParamEmi.DecimalesEnImpuestos < 0 Or ParamEmi.DecimalesEnImpuestos > 6) Then
                    mensaje &= "Solo se permiten el manejo de 0 a 6 decimales (Decimales en Impuestos)." & vbCrLf
                End If
            End If
            If (String.IsNullOrWhiteSpace(ParamEmi.DecimalesEnPrecios)) Then
                mensaje &= "El dato Decimales en Precios no puede ir vacio." & vbCrLf
            Else
                If Not (IsNumeric(ParamEmi.DecimalesEnPrecios)) Then
                    mensaje &= "El dato Decimales en Precios debe ser numérico." & vbCrLf
                ElseIf (ParamEmi.DecimalesEnPrecios < 0 Or ParamEmi.DecimalesEnPrecios > 6) Then
                    mensaje &= "Solo se permiten el manejo de 0 a 6 decimales (Decimales en Precios)." & vbCrLf
                End If
            End If
            If (String.IsNullOrWhiteSpace(ParamEmi.DecimalesEnTotales)) Then
                mensaje &= "El dato Decimales en Totales no puede ir vacio." & vbCrLf
            Else
                If Not (IsNumeric(ParamEmi.DecimalesEnTotales)) Then
                    mensaje &= "El dato Decimales en Totales debe ser numérico." & vbCrLf
                ElseIf (ParamEmi.DecimalesEnTotales < 0 Or ParamEmi.DecimalesEnTotales > 6) Then
                    mensaje &= "Solo se permiten el manejo de 0 a 6 decimales (Decimales en Totales)." & vbCrLf
                End If
            End If
            If (String.IsNullOrWhiteSpace(ParamEmi.UsuarioTimbrado)) Then
                mensaje &= "El Usuario de la cuenta de timbrado es obligatorio, no puede ir el campo vacio." & vbCrLf
            End If

            If (String.IsNullOrWhiteSpace(ParamEmi.PassTimbrado)) Then
                mensaje &= "La Contraseña de la cuenta de timbrado es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                ParamEmi.PassTimbrado = ParamEmi.PassTimbrado.Trim
                'ParamEmi.PassTimbrado = RijndaelSimple.encriptaDefault(ParamEmi.PassTimbrado)
            End If
            If (ParamEmi.UsaMailPropio = True) Then
                If (String.IsNullOrWhiteSpace(ParamEmi.CorreoElectronico)) Then
                    mensaje &= "La Direccion de Correo Electrónico es obligatoria, no puede ir el campo vacio." & vbCrLf
                Else
                    ParamEmi.CorreoElectronico = ParamEmi.CorreoElectronico.Trim
                    If (ParamEmi.CorreoElectronico.Length > 255) Then
                        ParamEmi.CorreoElectronico = ParamEmi.CorreoElectronico.Substring(0, 255)
                    End If
                    If (Not (csValidaciones.esCorreoValido(ParamEmi.CorreoElectronico))) Then
                        mensaje &= String.Format("Dirección de Correo Electrónico <{0}> no válido", ParamEmi.CorreoElectronico) & vbCrLf
                    End If
                End If
                If (String.IsNullOrWhiteSpace(ParamEmi.PassMail)) Then
                    mensaje &= "La Contraseña de Correo Electrónico es obligatoria, no puede ir el campo vacio." & vbCrLf
                Else
                    ParamEmi.PassMail = ParamEmi.PassMail.Trim
                    If (ParamEmi.PassMail.Length > 255) Then
                        ParamEmi.PassMail = ParamEmi.PassMail.Substring(0, 255)
                    End If
                    'ParamEmi.PassMail = RijndaelSimple.encriptaDefault(ParamEmi.PassMail)
                End If
                If (String.IsNullOrWhiteSpace(ParamEmi.SMTP)) Then
                    mensaje &= "El Servidor SMTP es requerido." & vbCrLf
                Else
                    ParamEmi.SMTP = ParamEmi.SMTP.Trim
                    If (ParamEmi.SMTP.Length > 255) Then
                        ParamEmi.SMTP = ParamEmi.SMTP.Substring(0, 255)
                    End If
                End If
                If (String.IsNullOrWhiteSpace(ParamEmi.Puerto)) Then
                    mensaje &= "El Puerto del Servidor SMTP de Correos es requerido." & vbCrLf
                Else
                    If (ParamEmi.Puerto <= 0) Then
                        mensaje &= "El Puerto de Correo Electrónico debe ser mayor a 0." & vbCrLf
                    End If
                End If
            Else
                If (String.IsNullOrWhiteSpace(ParamEmi.PassMail)) Then
                    ParamEmi.PassMail = ""
                End If
            End If

            If (String.IsNullOrWhiteSpace(ParamEmiPrede.Emite)) Then
                If (ParamEmiPrede.Emite < -1) Then
                    mensaje &= "El dato Emite no puede tener un valor menor a -1." & vbCrLf
                End If
            End If

            If (String.IsNullOrWhiteSpace(ParamEmiPrede.UdeM)) Then
                If (ParamEmiPrede.UdeM < 0) Then
                    mensaje &= "El dato Unidad de Medida no puede tener un valor negativo." & vbCrLf
                End If
            End If

            If (String.IsNullOrWhiteSpace(ParamEmiPrede.FormaPago)) Then
                If (ParamEmiPrede.FormaPago < 0) Then
                    mensaje &= "El dato Forma de Pago no puede tener un valor negativo." & vbCrLf
                End If
            End If

            If (String.IsNullOrWhiteSpace(ParamEmiPrede.MetodoPago)) Then
                If (ParamEmiPrede.MetodoPago < 0) Then
                    mensaje &= "El dato Método de Pago no puede tener un valor negativo." & vbCrLf
                End If
            End If

            If (Not String.IsNullOrWhiteSpace(ParamEmiPrede.CondicionesPago)) Then
                ParamEmiPrede.CondicionesPago = ParamEmiPrede.CondicionesPago.Trim
                If (ParamEmiPrede.CondicionesPago.Length > 255) Then
                    ParamEmiPrede.CondicionesPago = ParamEmiPrede.CondicionesPago.Substring(0, 255)
                End If
            End If

            If (Not String.IsNullOrWhiteSpace(ParamEmiPrede.TituloNumSerie)) Then
                ParamEmiPrede.TituloNumSerie = ParamEmiPrede.TituloNumSerie.Trim
                If (ParamEmiPrede.TituloNumSerie.Length > 255) Then
                    ParamEmiPrede.TituloNumSerie = ParamEmiPrede.TituloNumSerie.Substring(0, 255)
                End If
            End If

            If (Not String.IsNullOrWhiteSpace(ParamEmiPrede.TituloMotivoDesc)) Then
                ParamEmiPrede.TituloMotivoDesc = ParamEmiPrede.TituloMotivoDesc.Trim
                If (ParamEmiPrede.TituloMotivoDesc.Length > 255) Then
                    ParamEmiPrede.TituloMotivoDesc = ParamEmiPrede.TituloMotivoDesc.Substring(0, 255)
                End If
            End If

            If (Not String.IsNullOrWhiteSpace(ParamEmiPrede.TituloPorcDesc)) Then
                ParamEmiPrede.TituloPorcDesc = ParamEmiPrede.TituloPorcDesc.Trim
                If (ParamEmiPrede.TituloPorcDesc.Length > 255) Then
                    ParamEmiPrede.TituloPorcDesc = ParamEmiPrede.TituloPorcDesc.Substring(0, 255)
                End If
            End If

            If (ParamEmiPrede.AduanaPredet = True) Then
                If (String.IsNullOrWhiteSpace(ParamEmiPrede.NumAduana)) Then
                    mensaje &= "El Número de Aduana es obligatorio, no puede ir el campo vacio." & vbCrLf
                Else
                    ParamEmiPrede.NumAduana = ParamEmiPrede.NumAduana.Trim
                    If (ParamEmiPrede.NumAduana.Length > 255) Then
                        ParamEmiPrede.NumAduana = ParamEmiPrede.NumAduana.Substring(0, 255)
                    End If
                End If

                If (Not String.IsNullOrWhiteSpace(ParamEmiPrede.Aduana)) Then
                    ParamEmiPrede.Aduana = ParamEmiPrede.Aduana.Trim
                    If (ParamEmiPrede.Aduana.Length > 255) Then
                        ParamEmiPrede.Aduana = ParamEmiPrede.Aduana.Substring(0, 255)
                    End If
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ParamEmiBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaParamEmi(ByVal TokenConexion As String, ByVal ParamEmi As ParametrosEmisionBE,
                                      ByVal ParamEmiPrede As ParametrosEmisionPredeterminadosBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim ParamEmiDAL As ParamEmiDAL = New ParamEmiDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoParaActualizar(ParamEmi, ParamEmiPrede, detResp.Mensajes)) Then
                ParamEmiDAL = New ParamEmiDAL(TokenConexion)
                Using transacCta As TransactionScope = New TransactionScope()
                    If (ParamEmiDAL.actualizaParamEmi(ParamEmi)) Then
                        If (ParamEmiDAL.actualizaParamEmiPrede(ParamEmiPrede)) Then
                            transacCta.Complete()
                            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                                     "Datos de Parámetros de emisión de comprobantes actualizados.")
                            Return True
                        Else
                            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                                     "No se pudo realizar la actualización de Parámetros de emisión de comprobantes." & vbCrLf & detResp.Mensajes)
                            Return False
                        End If
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                                 "No se pudo realizar la actualización de Parámetros de emisión de comprobantes." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End Using
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ParamEmiBL.ActualizaParamEmi")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al actualizar Parámetros de emisión de comprobantes: " & ex.Message)
            Return False
        Finally
            ParamEmiDAL = Nothing
        End Try
    End Function

    Public Function GetParamEmi(ByVal tokenConexion As String, ByRef detResp As DetalleRespuesta) As ParametrosEmisionBE
        detResp.Mensajes = ""
        Dim ParamEmiDAL As ParamEmiDAL = New ParamEmiDAL("")
        Dim ParamEmiBE As ParametrosEmisionBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            ParamEmiDAL = New ParamEmiDAL(tokenConexion)
            ParamEmiBE = ParamEmiDAL.getParamEmi()
            If (ParamEmiBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Se obtuvo la información de Parámetros de emisión de comprobantes con éxito.")
                Return ParamEmiBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                         "No se obtuvo la información de Parámetros de emisión de comprobantes." & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
            'If (EsValidoParaGetParamEmi(IdParamEmi, mensajes)) Then
            'Else
            '    codigoResp = 1
            '    mensajes = "El Id de Parámetros de emisión de comprobantes contiene valor invalido " & mensajes
            '    Return Nothing
            'End If
        Catch ex As Exception
            Log.LogException(ex, "ParamEmiBL.GetParamEmi")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información de Parámetros de emisión de comprobantes: " & ex.Message)
            Return Nothing
        Finally
            ParamEmiDAL = Nothing
            ParamEmiBE = Nothing
        End Try
    End Function

    Public Function GetParamEmiPrede(ByVal tokenConexion As String, ByRef detResp As DetalleRespuesta) As ParametrosEmisionPredeterminadosBE
        detResp.Mensajes = ""
        Dim ParamEmiDAL As ParamEmiDAL = New ParamEmiDAL("")
        Dim ParamEmiPredeBE As ParametrosEmisionPredeterminadosBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            ParamEmiDAL = New ParamEmiDAL(tokenConexion)
            ParamEmiPredeBE = ParamEmiDAL.getParamEmiPrede()
            If (ParamEmiPredeBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo la información de Parámetros de emisión de comprobantes Predeterminar con éxito.")
                Return ParamEmiPredeBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                         "No se obtuvo la información de Parámetros de emisión de comprobantes predeterminados." & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If

            'If (EsValidoParaGetParamEmi(IdParamEmi, mensajes)) Then
            'Else
            '    codigoResp = 1
            '    mensajes = "El Id de Parámetros de emisión de comprobantes contiene valor invalido " & mensajes
            '    Return Nothing
            'End If
        Catch ex As Exception
            Log.LogException(ex, "ParamEmiBL.GetParamEmiPrede")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información de Parámetros de emisión de comprobantes predeterminados: " & ex.Message)
            Return Nothing
        Finally
            ParamEmiDAL = Nothing
            ParamEmiPredeBE = Nothing
        End Try
    End Function

    Public Sub GetConfiguracionDecimales(ByVal tokenConexion As String, ByRef decEnCantidades As Int16,
                                              ByRef decEnPrecios As Int16, ByRef decEnImpuestos As Int16,
                                              ByRef decEnTotales As Int16)
        Dim ParamEmiDAL As ParamEmiDAL = New ParamEmiDAL("")
        decEnPrecios = 0
        decEnCantidades = 0
        decEnImpuestos = 0
        decEnTotales = 0
        Try
            ParamEmiDAL = New ParamEmiDAL(RijndaelSimple.desencriptaDefault(tokenConexion))
            If (Not ParamEmiDAL.getConfiguracionDecimales(decEnCantidades, decEnPrecios, decEnImpuestos, decEnTotales)) Then
                decEnPrecios = 2
                decEnCantidades = 2
                decEnImpuestos = 2
                decEnTotales = 2
                Log.writeLog("No se obtuvo la configuración de decimales para el token: " & tokenConexion)
            End If
        Catch ex As Exception
            Log.LogException(ex, "ParamEmiBL.GetConfiguracionDecimales")
        Finally
            ParamEmiDAL = Nothing
        End Try

    End Sub

    'Private Function EsValidoParaGetParamEmi(ByRef IdParamEmi As Integer, ByRef mensaje As String) As Boolean
    '    mensaje = ""
    '    Try
    '        If (String.IsNullOrEmpty(IdParamEmi)) Then
    '            mensaje &= "El campo Id de Parámetros de emisión de comprobante no puede ir  vacio." & vbCrLf
    '        Else
    '            If (IsNumeric(IdParamEmi)) Then
    '                If (IdParamEmi = 0) Then
    '                    mensaje &= "El campo Id de Parámetros de emisión de comprobante no puede ser 0." & vbCrLf
    '                End If
    '            Else
    '                mensaje &= "El campo Id de Parámetros de emisión de comprobante debe ser numerico." & vbCrLf
    '            End If
    '        End If

    '        Return (mensaje = "")
    '    Catch ex As Exception
    '        Log.LogException(ex, "ParamEmiBL.EsValidoParaGetParamEmi")
    '        mensaje &= ex.Message
    '        Return False
    '    End Try
    'End Function


End Class
